package educar.models;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import educar.db.JPA;


/**
 * Permite modelar la relacion tiene una
 * solucion, para poder cargar las soluciones
 */
public class Tiene{
	private Student alumno;
	private Actividad actividad;
	private String cod_solucion;
	private static JPA jpa = new JPA();
	
	/**
	 * Constructor de la clase tien
	 * @param alumno "Student que tiene la solucion"
	 * @param activida "actividad sobre la cual entrega solucion"
	 * @param cod_solucion "codigo de solucion"
	 */
	public Tiene(Student alumno,Actividad activida,String cod_solucion) {
		this.setActividad(activida);
		this.setAlumno(alumno);
		this.setCod_solucion(cod_solucion);
	}

	/**
	 * @return the alumno
	 */
	public Student getAlumno() {
		return alumno;
	}

	/**
	 * @param alumno the alumno to set
	 */
	public void setAlumno(Student alumno) {
		this.alumno = alumno;
	}

	/**
	 * @return the actividad
	 */
	public Actividad getActividad() {
		return actividad;
	}

	/**
	 * @param actividad the actividad to set
	 */
	public void setActividad(Actividad actividad) {
		this.actividad = actividad;
	}

	/**
	 * @return the cod_solucion
	 */
	public String getCod_solucion() {
		return cod_solucion;
	}

	/**
	 * @param cod_solucion the cod_solucion to set
	 */
	public void setCod_solucion(String cod_solucion) {
		this.cod_solucion = cod_solucion;
	}
		
	
	/**
	 * Permite guardar una actividad en la base de datos
	 * @return true o false dependiendo existo o fracaso guardando
	 */
	public boolean save() {
			try {
				Tiene.getTieneByDNICodigoAct(this.getAlumno().getDni(),this.getActividad().getCod_actividad());
				return false;
			} catch (tieneNotFound e1) {
				String[] columns = { "dni","cod_actividad","cod_solucion"};
				PreparedStatement stm = jpa.newRecord("tiene", columns);		
				try {
					stm.setString(1, this.getAlumno().getDni());
					stm.setString(2, this.getActividad().getCod_actividad());
					stm.setString(3, this.getCod_solucion());
				} catch (SQLException e) {
					e.printStackTrace();
					return false;
				}				
				jpa.create(stm);
				return true;
			}
	}
	
	
	/**
	 * Permite eliminar una actividad en la base de datos
	 */
	public void destroy() {
		try {
			JPA.runUpdate("delete from tiene where (dni,cod_actividad) = "+"('"+this.getAlumno().getDni()+"','"+this.getActividad().getCod_actividad()+"');");
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * dado el codigo te retorna una actividad
	 * @param cod_actividad "codigo de la actividad"
	 * @return "objeto actividad con ese codigo"
	 * @throws actividadNotFound "por si no existe una con ese codigo"
	 */
	public static Tiene getTieneByDNICodigoAct(String dni,String cod_act) throws tieneNotFound {
		ResultSet rs = null;
		Tiene t = null;
		String[] columnas = {"dni","cod_actividad"};
		String[] datos = {dni,cod_act};
		rs = jpa.getByField("tiene",columnas, datos);		
		try {
			if (rs.next()) {
				t = new Tiene(Student.getStudentByDni(rs.getString(1)),Actividad.getActividadByCodigo(rs.getString(2)),rs.getString(3));
			} 
			else {
				throw new tieneNotFound();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (studentNotFound e) {
			e.printStackTrace();
		} catch (actividadNotFound e) {
			e.printStackTrace();
		}
		return t;
	}
	
}